package com.atbeijing.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark10_Oper_Transform {

    def main(args: Array[String]): Unit = {

        val conf = new SparkConf().setMaster("local[*]").setAppName("TransformOperator")
        val sc = new SparkContext(conf)

        // TODO 算子 - 转换 - coalesce

        val rdd = sc.makeRDD(List(1,2,3,4,5,6), 3)

        // 【1，2】，【3，4】，【5，6】
        // 【1，2，3】，【4，5，6】
        // 【1，2】。【3，4，5，6】
        // 合并的策略

        // coalesce算子第一个参数表示改变分区的数量
        // coalesce算子第二个参数表示数据是否shuffle，默认为false
        val rdd1: RDD[Int] = rdd.coalesce(2)//可以改变分区数
        // 如果不适用shuffle的场合下，分区数量不能修改为比之前大的值，因为数据不会打乱重新组合
//        val rdd1: RDD[Int] = rdd.coalesce(4)//没有shuffle所以分区还是3个,没改变分区数
//        val rdd2: RDD[Int] = rdd.coalesce(4, true)
//        rdd1.collect().foreach(println)
        rdd1.saveAsTextFile("output")

        sc.stop()

    }
}
